import WxRequest from 'mina-request'
import { asyncClearStorage, getStorage } from './storage'
import { modal, toast } from './extendApi'
import { env } from './env'

// 对 WxRequest 进行实例化
const instance = new WxRequest({
  // baseURL: 'https://gmall-prod.atguigu.cn/mall-api', // 使用时请换成真实接口
  baseURL: env.baseURL,
  timeout: 3000, // 超时时长
  isLoading: true // 是否使用默认的 loading 效果
})

// 添加请求拦截器
instance.interceptors.request = (config) => {
  const token = getStorage('token')
  if (token) {
    config.header['token'] = token
  }
  // 在发送请求之前做些什么
  return config
}

// 添加响应拦截器
instance.interceptors.response = async (response) => {
  // isSuccess true:success回调函数 | false:fail回调函数
  const { isSuccess, data } = response
  // 要是为false的话 就说明是网络异常
  if (!isSuccess) {
    toast({
      title: '网络异常请重试',
      icon: 'error'
    })
    return Promise.reject(response)
  }
  switch (data.code) {
    case 200:
      return Promise.resolve(data)
    case 208:
      const res = await modal({
        content: '鉴权失败，请重新登录',
        showCancel: false
      })
      if (res) {
        asyncClearStorage()
        wx.navigateTo({
          url: '/pages/login/login'
        })
      }
      return Promise.reject(response)
    default:
      toast({
        title: '程序出现异常，请联系客服或稍后重试'
      })
      return Promise.reject(response)
  }
}

export default instance
